package org.langqiao.algorithm;
/*
 * 输出一个旋转矩阵，用递归 的方法
 */
import java.util.*;
public class LuoXuanJuZhen {
	private static int juzhen[][]=new int[100][100];
	public static void main(String[] args)
	{
		Scanner sc=new Scanner(System.in);
		System.out.println("请输入n的值为：");
	    int n=sc.nextInt(); 
	    fill(1,0,n);
	    for(int i=0;i<n;i++)
		{
			for(int j=0;j<n;j++)
			{
				System.out.print(juzhen[i][j]+"\t");
			}
			System.out.println();
		}
	}
	public static void fill(int num,int begin,int n)//num为起始的值，begin为开始的位置，n的矩阵的阶数
	{
//		int juzhen[][]=new int[n+100][n+100];//初始化一个矩阵
		if(n==0)
			return;
		if(n==1)
		{
			juzhen[begin][begin]=num;
			return;
		}
		int r=begin,c=begin;//r表示行，c表示列
		juzhen[r][c]=num;//先将矩阵的左上角给填好
		num++;
		for(int i=0;i<n-1;i++)//填充第一行
		{
			c++;
			juzhen[r][c]=num;
			num++;
		}
		for(int i=0;i<n-1;i++)
		{
			r++;
			juzhen[r][c]=num;
			num++;
		}
		for(int i=0;i<n-1;i++)
		{
			c--;
			juzhen[r][c]=num;
			num++;
		}
		for(int i=0;i<n-2;i++)
		{
			r--;
			juzhen[r][c]=num;
			num++;
		}
		fill(num,r,n-2);//递归调用fill()方法，填充内部的矩阵
//		由于每次的起点begin都是再矩阵的对角线上，r=c，所以fill(num,r,n-2)和fill(num,c,n-2)都对
	}

}
